package com.ruoyi.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.WebMallUserOrder;
import com.ruoyi.system.vo.WebMallUserOrderSaveVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 商城订单Service接口
 * 
 * @author wsliupan@126.com
 * @date 2021-06-17
 */
public interface IWebMallUserOrderService extends IService<WebMallUserOrder>
{
    /**
     * 查询商城订单
     * 
     * @param id 商城订单ID
     * @return 商城订单
     */
    public WebMallUserOrder selectWebMallUserOrderById(Long id);

    /**
     * 查询商城订单列表
     * 
     * @param webMallUserOrder 商城订单
     * @return 商城订单集合
     */
    public List<WebMallUserOrder> selectWebMallUserOrderList(WebMallUserOrder webMallUserOrder);

    /**
     * 新增商城订单
     * 
     * @param webMallUserOrder 商城订单
     * @return 结果
     */
    public int insertWebMallUserOrder(WebMallUserOrder webMallUserOrder);

    /**
     * 修改商城订单
     * 
     * @param webMallUserOrder 商城订单
     * @return 结果
     */
    public boolean updateWebMallUserOrder(WebMallUserOrder webMallUserOrder);

    /**
     * 批量删除商城订单
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public boolean deleteWebMallUserOrderByIds(String ids);

    /**
     * 删除商城订单信息
     * 
     * @param id 商城订单ID
     * @return 结果
     */
    public boolean deleteWebMallUserOrderById(Long id);

    /**
     * 下单保存
     */
    public Map<String,Object> saveOrder(WebMallUserOrderSaveVO orderSaveVO);

    /**
     * 根据传入的产品ID及选中的SKU，返回产品相关信息并计算出订单金额
     * @param orderSaveVO
     * @param productMaps
     * @return
     */
    public BigDecimal getOrderMoney(WebMallUserOrderSaveVO orderSaveVO, List<Map<String,Object>> productMaps);

    /**
     * 根据积分和订单总金额计算出使用积分后的需要支付的金额
     * @param userScoe
     * @return
     */
    public BigDecimal useScorePayMoney(int userScoe , BigDecimal orderMoney);

    /**
     * 取消订单
     * @param orderId
     * @return
     */
    public void cancelOrder(Integer orderId);

    /**
     * 支付成功的处理
     * @param pay_no
     * @param payMoney
     * @param transaction_id
     * @param result_code
     */
    public void paySuccess(String pay_no, double payMoney, String transaction_id ,String result_code);
}
